From 0af8ed90f7d2865dfab8eb07d4bb3bd84eab9615 Mon Sep 17 00:00:00 2001 From: str4d <str4d@mail.i2p> Date: Mon, 26 Aug 2013 02:31:08 +0000 Subject: [PATCH] Added NotEqual and EqualAny, removed show-on-null assumption --- .../i2p/android/wizard/model/Conditional.java | 30 +++++++++++++++++-- src/net/i2p/android/wizard/model/Page.java | 12 ++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/net/i2p/android/wizard/model/Conditional.java b/src/net/i2p/android/wizard/model/Conditional.java index 0458c2b83..829ecf84e 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 01d7e60c9..98cbdd6a2 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; -- GitLab