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