Added NotEqual and EqualAny, removed show-on-null assumption

This commit is contained in:
str4d
2013-08-26 02:31:08 +00:00
parent c761287a8a
commit 0af8ed90f7
2 changed files with 39 additions and 3 deletions

View File

@ -17,6 +17,7 @@
package net.i2p.android.wizard.model; package net.i2p.android.wizard.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
public class Conditional implements ModelCallbacks { public class Conditional implements ModelCallbacks {
@ -45,10 +46,33 @@ public class Conditional implements ModelCallbacks {
} }
public boolean isSatisfied() { public boolean isSatisfied() {
// If we have no data from the conditional,
// assume that the page will be shown.
if (mData == null) return true;
return mCompValue.equals(mData); return mCompValue.equals(mData);
} }
} }
public class NotEqualCondition<T> implements Condition {
private T mCompValue;
public NotEqualCondition(Page page, T compValue) {
mCompValue = compValue;
mConditionalPages.add(page);
}
public boolean isSatisfied() {
return !(mCompValue.equals(mData));
}
}
public class EqualAnyCondition<T> implements Condition {
private ArrayList<T> mChoices = new ArrayList<T>();
public EqualAnyCondition(Page page, T... choices) {
mChoices.addAll(Arrays.asList(choices));
mConditionalPages.add(page);
}
public boolean isSatisfied() {
return mChoices.contains(mData);
}
}
} }

View File

@ -152,6 +152,18 @@ public abstract class Page implements PageTreeNode {
return this; return this;
} }
public <T> Page setNotEqualCondition(Conditional conditional, T comp) {
Conditional.Condition c = conditional.new NotEqualCondition<T>(this, comp);
mConditions.add(c);
return this;
}
public <T> Page setEqualAnyCondition(Conditional conditional, T... choices) {
Conditional.Condition c = conditional.new EqualAnyCondition<T>(this, choices);
mConditions.add(c);
return this;
}
public Page satisfyAllConditions(boolean conditionAnd) { public Page satisfyAllConditions(boolean conditionAnd) {
mConditionAnd = conditionAnd; mConditionAnd = conditionAnd;
return this; return this;