package de.tu.darmstadt.seemoo.ansian.model.preferences;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import de.tu.darmstadt.seemoo.ansian.MainActivity;
public abstract class MySharedPreferences implements SharedPreferences {
@SuppressWarnings("unused")
private static final String LOGTAG = "MySharedPreferences";
private SharedPreferences preferences;
protected MainActivity activity;
private String prefix;
private static List<MySharedPreferences> prefs = new ArrayList<MySharedPreferences>();
public MySharedPreferences(MainActivity activity) {
this.activity = activity;
// Set default Settings on first run:
PreferenceManager.setDefaultValues(activity, getName(), activity.MODE_PRIVATE, getResID(), false);
preferences = activity.getSharedPreferences(getName(), activity.MODE_PRIVATE);
loadPreference();
prefs.add(this);
prefix = "";// getName()+"_";
}
public static void saveAll() {
for (MySharedPreferences pref : prefs)
pref.savePreference();
}
public static void loadAll() {
for (MySharedPreferences pref : prefs)
pref.loadPreference();
}
public abstract void loadPreference();
public abstract void savePreference();
public abstract String getName();
public abstract int getResID();
@Override
public Map<String, ?> getAll() {
return preferences.getAll();
}
@Override
public String getString(String key, String defValue) {
return String.valueOf(preferences.getString(prefix + key, defValue));
}
@Override
public Set<String> getStringSet(String key, Set<String> defValues) {
return preferences.getStringSet(prefix + key, defValues);
}
@Override
public int getInt(String key, int defValue) {
try {
return preferences.getInt(prefix + key, defValue);
} catch (ClassCastException e) {
return Integer.valueOf(preferences.getString(prefix + key, "" + defValue));
}
}
// private Object catchClassCastException(ClassCastException e) {
// String message = e.getMessage();
// message.lastIndexOf("java.lang."))
//
// return Integer.valueOf(preferences.getString(prefix+key, "" + defValue));
// }
@Override
public long getLong(String key, long defValue) {
try {
return preferences.getLong(prefix + key, defValue);
} catch (ClassCastException e) {
return Long.valueOf(preferences.getString(prefix + key, "" + defValue));
}
}
@Override
public float getFloat(String key, float defValue) {
try {
return preferences.getFloat(prefix + key, defValue);
} catch (ClassCastException e) {
return Float.valueOf(preferences.getString(prefix + key, "" + defValue));
}
}
@Override
public boolean getBoolean(String key, boolean defValue) {
try {
return preferences.getBoolean(prefix + key, defValue);
} catch (ClassCastException e) {
return Boolean.valueOf(preferences.getString(prefix + key, "" + defValue));
}
}
protected String getString(int resId) {
return activity.getString(resId);
}
@Override
public boolean contains(String key) {
return preferences.contains(prefix + key);
}
@Override
public MyEditor edit() {
return new MyEditor(prefix, preferences.edit());
}
@Override
public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
preferences.registerOnSharedPreferenceChangeListener(listener);
}
@Override
public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
preferences.unregisterOnSharedPreferenceChangeListener(listener);
}
public boolean getBoolean(String key, String defValue) {
return Boolean.valueOf(preferences.getString(prefix + key, defValue));
}
}