diff options
author | Nicolas Roard <nicolasroard@google.com> | 2018-03-12 15:07:19 -0700 |
---|---|---|
committer | Nicolas Roard <nicolasroard@google.com> | 2018-03-12 15:07:33 -0700 |
commit | 62068c5bf36a6fe65e8497d11eb0df4dd55047eb (patch) | |
tree | a247876e7c053a8ea9a2101ac8b88d04e1c2c284 | |
parent | 9c1c10ea82efa1d979d9481f67651d20b0f6d8a4 (diff) | |
download | sherpa-62068c5bf36a6fe65e8497d11eb0df4dd55047eb.tar.gz |
Don’t allow GONE widgets to be part of a barrier
Test: passes all existing tests
Fixes: 73634368
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; |