package de.ironjan.mensaupb.prefs;
import android.support.v4.app.Fragment;
import android.widget.CheckBox;
import org.androidannotations.annotations.AfterInject;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.Trace;
import org.androidannotations.annotations.sharedpreferences.Pref;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import de.ironjan.mensaupb.R;
import de.ironjan.mensaupb.stw.rest_api.Allergen;
/**
* Fragment to change filter settings w.r.t allergens and additionals.
*/
@EFragment(R.layout.fragment_additional_settings)
public class AdditionalSettingsFragment extends Fragment {
private static final int[] CHECK_BOXES = {
R.id.checkBoxAntioxidants,
R.id.checkBoxColored,
R.id.checkBoxTasteEnhancer,
R.id.checkBoxBlackened,
R.id.checkBoxSulfured,
R.id.checkBoxWaxed,
R.id.checkBoxCaffeine,
R.id.checkBoxConserved,
R.id.checkBoxLactoProtein,
R.id.checkBoxNitrateSalt,
R.id.checkBoxPhenylalanine,
R.id.checkBoxPhosphate,
R.id.checkBoxSweetener,
R.id.checkBoxQuinine,
R.id.checkBoxTaurine
};
@Pref
AllergenFilterPrefs_ mAllergenFilterPrefs;
private Set<String> mFilteredAllergens = new HashSet<>();
private HashMap<Integer, String> mCheckBoxIdToAllergenCode = new HashMap<>();
private HashMap<String, Integer> mAllergenCodeToCheckBoxId = new HashMap<>();
@AfterInject
@Trace(level = 5)
void loadPreferences() {
mFilteredAllergens = mAllergenFilterPrefs
.filteredAdditionals()
.getOr(new HashSet<String>());
buildHashMaps();
}
@Trace
void buildHashMaps() {
addToTables(R.id.checkBoxAntioxidants, Allergen.ANTIOXIDANTS.getType());
addToTables(R.id.checkBoxColored, Allergen.COLORED.getType());
addToTables(R.id.checkBoxTasteEnhancer, Allergen.FLAVOR_ENHANCERS.getType());
addToTables(R.id.checkBoxBlackened, Allergen.BLACKENED.getType());
addToTables(R.id.checkBoxSulfured, Allergen.SULFURATED.getType());
addToTables(R.id.checkBoxWaxed, Allergen.WAXED.getType());
addToTables(R.id.checkBoxCaffeine, Allergen.COFFEINE.getType());
addToTables(R.id.checkBoxConserved, Allergen.CONSERVED.getType());
addToTables(R.id.checkBoxLactoProtein, Allergen.LACTOPROTEIN.getType());
addToTables(R.id.checkBoxNitrateSalt, Allergen.NITRATE_SALT.getType());
addToTables(R.id.checkBoxPhenylalanine, Allergen.PHENYLALANINE.getType());
addToTables(R.id.checkBoxPhosphate, Allergen.PHOSPHAT.getType());
addToTables(R.id.checkBoxSweetener, Allergen.SWEETENER.getType());
addToTables(R.id.checkBoxQuinine, Allergen.QUININE.getType());
addToTables(R.id.checkBoxTaurine, Allergen.TAURINE.getType());
}
@Trace
void addToTables(int id, String type) {
mCheckBoxIdToAllergenCode.put(id, type);
mAllergenCodeToCheckBoxId.put(type, id);
}
@AfterViews
void showPreferences() {
for (int id : CHECK_BOXES) {
CheckBox checkBox = (CheckBox) getView().findViewById(id);
String type = mCheckBoxIdToAllergenCode.get(id);
boolean isFiltered = mFilteredAllergens.contains(type);
checkBox.setChecked(isFiltered);
}
}
@Override
public void onPause() {
mFilteredAllergens.clear();
for (int id : CHECK_BOXES) {
CheckBox checkBox = (CheckBox) getView().findViewById(id);
String type = mCheckBoxIdToAllergenCode.get(id);
if (checkBox.isChecked()) {
mFilteredAllergens.add(type);
}
}
mAllergenFilterPrefs.edit().filteredAdditionals()
.put(mFilteredAllergens).apply();
Set<String> strings = mAllergenFilterPrefs.filteredAdditionals().get();
super.onPause();
}
}