diff --git a/src/net/i2p/android/wizard/model/Conditional.java b/src/net/i2p/android/wizard/model/Conditional.java index 0458c2b835b54363b421462baf6feb9b50f31a77..829ecf84e078d32160f76be8fb940ae061f9d51b 100644 --- a/src/net/i2p/android/wizard/model/Conditional.java +++ b/src/net/i2p/android/wizard/model/Conditional.java @@ -17,6 +17,7 @@ package net.i2p.android.wizard.model; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class Conditional implements ModelCallbacks { @@ -45,10 +46,33 @@ public class Conditional implements ModelCallbacks { } 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); } } + + 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); + } + } } diff --git a/src/net/i2p/android/wizard/model/Page.java b/src/net/i2p/android/wizard/model/Page.java index 01d7e60c93a6ed81aa4a119934bf13a77a7d597f..98cbdd6a2796b69b14b6c86ae310289298d2161a 100644 --- a/src/net/i2p/android/wizard/model/Page.java +++ b/src/net/i2p/android/wizard/model/Page.java @@ -152,6 +152,18 @@ public abstract class Page implements PageTreeNode { 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) { mConditionAnd = conditionAnd; return this;