Turn on Data Matrix, including separate scan option in Android
[zxing.git] / android / src / com / google / zxing / client / android / PreferencesActivity.java
index 98542ee..480a1d3 100755 (executable)
@@ -20,22 +20,37 @@ import android.content.SharedPreferences;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
+import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
 
-public final class PreferencesActivity extends android.preference.PreferenceActivity
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * The main settings activity.
+ *
+ * @author dswitkin@google.com (Daniel Switkin)
+ */
+public final class PreferencesActivity extends PreferenceActivity
     implements OnSharedPreferenceChangeListener {
 
-  static final String KEY_DECODE_1D = "preferences_decode_1D";
-  static final String KEY_DECODE_QR = "preferences_decode_QR";
+  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";
 
-  static final String KEY_PLAY_BEEP = "preferences_play_beep";
-  static final String KEY_VIBRATE = "preferences_vibrate";
-  static final String KEY_COPY_TO_CLIPBOARD = "preferences_copy_to_clipboard";
+  public static final String KEY_PLAY_BEEP = "preferences_play_beep";
+  public static final String KEY_VIBRATE = "preferences_vibrate";
+  public static final String KEY_COPY_TO_CLIPBOARD = "preferences_copy_to_clipboard";
+  public static final String KEY_FRONT_LIGHT = "preferences_front_light";
+  public static final String KEY_BULK_MODE = "preferences_bulk_mode";
 
-  static final String KEY_HELP_VERSION_SHOWN = "preferences_help_version_shown";
+  public static final String KEY_HELP_VERSION_SHOWN = "preferences_help_version_shown";
+  public static final String KEY_NOT_OUR_RESULTS_SHOWN = "preferences_not_out_results_shown";
 
-  CheckBoxPreference mDecode1D;
-  CheckBoxPreference mDecodeQR;
+  private CheckBoxPreference decode1D;
+  private CheckBoxPreference decodeQR;
+  private CheckBoxPreference decodeDataMatrix;
 
   @Override
   protected void onCreate(Bundle icicle) {
@@ -44,18 +59,30 @@ public final class PreferencesActivity extends android.preference.PreferenceActi
 
     PreferenceScreen preferences = getPreferenceScreen();
     preferences.getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
-    mDecode1D = (CheckBoxPreference) preferences.findPreference(KEY_DECODE_1D);
-    mDecodeQR = (CheckBoxPreference) preferences.findPreference(KEY_DECODE_QR);
+    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)) {
-      mDecodeQR.setEnabled(mDecode1D.isChecked());
-      mDecodeQR.setChecked(true);
-    } else if (key.equals(KEY_DECODE_QR)) {
-      mDecode1D.setEnabled(mDecodeQR.isChecked());
-      mDecode1D.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)));
     }
   }