package org.emdev.common.settings.base;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import org.emdev.BaseDroidApp;
import org.emdev.utils.LengthUtils;
import org.emdev.utils.MathUtils;
import org.json.JSONException;
import org.json.JSONObject;
public class IntegerPreferenceDefinition extends BasePreferenceDefinition<Integer> {
public final int defValue;
public final int minValue;
public final int maxValue;
public IntegerPreferenceDefinition(final int keyRes, final int defValRef) {
super(keyRes);
defValue = (int) (Long.decode(BaseDroidApp.context.getString(defValRef)) & 0xFFFFFFFF);
minValue = Integer.MIN_VALUE;
maxValue = Integer.MAX_VALUE;
}
public IntegerPreferenceDefinition(final int keyRes, final int defValRef, final int minValRef, final int maxValRef) {
super(keyRes);
defValue = (int) (Long.decode(BaseDroidApp.context.getString(defValRef)) & 0xFFFFFFFF);
minValue = (int) (Long.decode(BaseDroidApp.context.getString(minValRef)) & 0xFFFFFFFF);
maxValue = (int) (Long.decode(BaseDroidApp.context.getString(maxValRef)) & 0xFFFFFFFF);
}
@Override
public Integer getPreferenceValue(final SharedPreferences prefs) {
return getPreferenceValue(prefs, defValue);
}
public int getPreferenceValue(final SharedPreferences prefs, final int defValue) {
if (!prefs.contains(key)) {
prefs.edit().putString(key, Integer.toString(defValue)).commit();
}
int value = defValue;
try {
final String str = prefs.getString(key, "");
if (LengthUtils.isNotEmpty(str)) {
value = Integer.parseInt(str);
}
} catch (final Exception e) {
LCTX.e("Settings processing error: [" + key + "] " + e.getMessage());
}
return MathUtils.adjust(value, minValue, maxValue);
}
public void setPreferenceValue(final Editor edit, final int value) {
edit.putString(key, Integer.toString(value));
}
@Override
public void restore(final JSONObject root, final Editor edit) throws JSONException {
final String value = root.optString(key);
try {
setPreferenceValue(edit, LengthUtils.isNotEmpty(value) ? Integer.valueOf(value) : defValue);
} catch (NumberFormatException ex) {
LCTX.e("Settings restoring error: [" + key + "] " + ex.getMessage());
}
}
}