Turn on Data Matrix, including separate scan option in Android
[zxing.git] / android / src / com / google / zxing / client / android / PreferencesActivity.java
index 9a37e78..480a1d3 100755 (executable)
@@ -23,6 +23,9 @@ import android.preference.CheckBoxPreference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
 
+import java.util.ArrayList;
+import java.util.Collection;
+
 /**
  * The main settings activity.
  *
@@ -33,6 +36,7 @@ public final class PreferencesActivity extends PreferenceActivity
 
   public static final String KEY_DECODE_1D = "preferences_decode_1D";
   public static final String KEY_DECODE_QR = "preferences_decode_QR";
+  public static final String KEY_DECODE_DATA_MATRIX = "preferences_decode_Data_Matrix";
   public static final String KEY_CUSTOM_PRODUCT_SEARCH = "preferences_custom_product_search";
 
   public static final String KEY_PLAY_BEEP = "preferences_play_beep";
@@ -46,6 +50,7 @@ public final class PreferencesActivity extends PreferenceActivity
 
   private CheckBoxPreference decode1D;
   private CheckBoxPreference decodeQR;
+  private CheckBoxPreference decodeDataMatrix;
 
   @Override
   protected void onCreate(Bundle icicle) {
@@ -56,16 +61,29 @@ public final class PreferencesActivity extends PreferenceActivity
     preferences.getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
     decode1D = (CheckBoxPreference) preferences.findPreference(KEY_DECODE_1D);
     decodeQR = (CheckBoxPreference) preferences.findPreference(KEY_DECODE_QR);
+    decodeDataMatrix = (CheckBoxPreference) preferences.findPreference(KEY_DECODE_DATA_MATRIX);
+    disableLastCheckedPref();
   }
 
-  // Prevent the user from turning off both decode options
   public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
-    if (key.equals(KEY_DECODE_1D)) {
-      decodeQR.setEnabled(decode1D.isChecked());
-      decodeQR.setChecked(true);
-    } else if (key.equals(KEY_DECODE_QR)) {
-      decode1D.setEnabled(decodeQR.isChecked());
-      decode1D.setChecked(true);
+    disableLastCheckedPref();
+  }
+
+  private void disableLastCheckedPref() {
+    Collection<CheckBoxPreference> checked = new ArrayList<CheckBoxPreference>(3);
+    if (decode1D.isChecked()) {
+      checked.add(decode1D);
+    }
+    if (decodeQR.isChecked()) {
+      checked.add(decodeQR);
+    }
+    if (decodeDataMatrix.isChecked()) {
+      checked.add(decodeDataMatrix);
+    }
+    boolean disable = checked.size() < 2;
+    for (CheckBoxPreference pref : new CheckBoxPreference[] {decode1D, decodeQR, decodeDataMatrix}) {
+      pref.setEnabled(!(disable && checked.contains(pref)));
     }
   }
+
 }