summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2018-03-12 15:07:19 -0700
committerNicolas Roard <nicolasroard@google.com>2018-03-12 15:07:33 -0700
commit62068c5bf36a6fe65e8497d11eb0df4dd55047eb (patch)
treea247876e7c053a8ea9a2101ac8b88d04e1c2c284
parent9c1c10ea82efa1d979d9481f67651d20b0f6d8a4 (diff)
downloadsherpa-62068c5bf36a6fe65e8497d11eb0df4dd55047eb.tar.gz
Don’t allow GONE widgets to be part of a barrier
Test: passes all existing tests Fixes: 73634368
-rw-r--r--solver/src/main/java/android/support/constraint/solver/widgets/Barrier.java21
-rw-r--r--solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java10
-rw-r--r--solver/src/main/java/android/support/constraint/solver/widgets/Guideline.java5
3 files changed, 32 insertions, 4 deletions
diff --git a/solver/src/main/java/android/support/constraint/solver/widgets/Barrier.java b/solver/src/main/java/android/support/constraint/solver/widgets/Barrier.java
index 6222dfa..c14ee4e 100644
--- a/solver/src/main/java/android/support/constraint/solver/widgets/Barrier.java
+++ b/solver/src/main/java/android/support/constraint/solver/widgets/Barrier.java
@@ -33,6 +33,11 @@ public class Barrier extends Helper {
private int mBarrierType = LEFT;
+ @Override
+ public boolean allowedInBarrier() {
+ return true;
+ }
+
public void setBarrierType(int barrierType) {
mBarrierType = barrierType;
}
@@ -61,12 +66,16 @@ public class Barrier extends Helper {
// match_constraint; we have to take it in account to set the strength of the barrier.
boolean hasMatchConstraintWidgets = false;
for (int i = 0; i < mWidgetsCount; i++) {
+ ConstraintWidget widget = mWidgets[i];
+ if (!widget.allowedInBarrier()) {
+ continue;
+ }
if ((mBarrierType == LEFT || mBarrierType == RIGHT)
- && mWidgets[i].getHorizontalDimensionBehaviour() == DimensionBehaviour.MATCH_CONSTRAINT) {
+ && widget.getHorizontalDimensionBehaviour() == DimensionBehaviour.MATCH_CONSTRAINT) {
hasMatchConstraintWidgets = true;
break;
} else if ((mBarrierType == TOP || mBarrierType == BOTTOM)
- && mWidgets[i].getVerticalDimensionBehaviour() == DimensionBehaviour.MATCH_CONSTRAINT) {
+ && widget.getVerticalDimensionBehaviour() == DimensionBehaviour.MATCH_CONSTRAINT) {
hasMatchConstraintWidgets = true;
break;
}
@@ -81,8 +90,12 @@ public class Barrier extends Helper {
}
}
for (int i = 0; i < mWidgetsCount; i++) {
- SolverVariable target = system.createObjectVariable(mWidgets[i].mListAnchors[mBarrierType]);
- mWidgets[i].mListAnchors[mBarrierType].mSolverVariable = target;
+ ConstraintWidget widget = mWidgets[i];
+ if (!widget.allowedInBarrier()) {
+ continue;
+ }
+ SolverVariable target = system.createObjectVariable(widget.mListAnchors[mBarrierType]);
+ widget.mListAnchors[mBarrierType].mSolverVariable = target;
if (mBarrierType == LEFT || mBarrierType == TOP) {
system.addLowerBarrier(position.mSolverVariable, target, hasMatchConstraintWidgets);
} else {
diff --git a/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java b/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java
index 52894db..d6d5269 100644
--- a/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java
+++ b/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java
@@ -1477,6 +1477,16 @@ public class ConstraintWidget {
return mVerticalChainStyle;
}
+ /**
+ * Returns true if this widget should be used in a barrier
+ */
+ public boolean allowedInBarrier() {
+ if (mVisibility == GONE) {
+ return false;
+ }
+ return true;
+ }
+
/*-----------------------------------------------------------------------*/
// Connections
/*-----------------------------------------------------------------------*/
diff --git a/solver/src/main/java/android/support/constraint/solver/widgets/Guideline.java b/solver/src/main/java/android/support/constraint/solver/widgets/Guideline.java
index 9a38b5b..331b8e7 100644
--- a/solver/src/main/java/android/support/constraint/solver/widgets/Guideline.java
+++ b/solver/src/main/java/android/support/constraint/solver/widgets/Guideline.java
@@ -55,6 +55,11 @@ public class Guideline extends ConstraintWidget {
}
}
+ @Override
+ public boolean allowedInBarrier() {
+ return true;
+ }
+
public int getRelativeBehaviour() {
if (mRelativePercent != -1) {
return RELATIVE_PERCENT;