package de.fun2code.android.piratebox.preference;
import android.content.Context;
import android.preference.EditTextPreference;
import android.util.AttributeSet;
import de.fun2code.android.piratebox.util.ServerConfigUtil;
public class CustomServerSettingEditTextPreference extends EditTextPreference {
// Must match the namespace in preferences.xml
private static final String ANDROID_NAMESPACE = "http://schemas.android.com/apk/res/android";
private static final String PIRATEBOX_NAMESPACE = "http://fun2code.de/apk/res/piratebox";
private String pawSetting = null;
private boolean isNumeric;
private Long numericDivider;
// Standard constructors
public CustomServerSettingEditTextPreference(Context context) {
super(context);
}
public CustomServerSettingEditTextPreference(Context context, AttributeSet attrs) {
super(context, attrs);
readAttributes(attrs);
}
public CustomServerSettingEditTextPreference(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
readAttributes(attrs);
}
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
if(isNumeric && numericDivider != null) {
long longValue = Long.valueOf(ServerConfigUtil.getServerSetting(pawSetting, getContext()));
longValue /= numericDivider;
setText(String.valueOf(longValue));
}
else {
setText(ServerConfigUtil.getServerSetting(pawSetting, getContext()));
}
}
@Override
public boolean persistString(String value) {
if(isNumeric && numericDivider != null) {
long valueLong = Long.valueOf(value);
valueLong *= numericDivider;
ServerConfigUtil.storeServerSetting(pawSetting, String.valueOf(valueLong), getContext());
}
else {
ServerConfigUtil.storeServerSetting(pawSetting, value, getContext());
}
return true;
}
/**
* Reads attribute values and initializes members
*
* @param attrs attributes to read from
*/
private void readAttributes(AttributeSet attrs) {
pawSetting = attrs.getAttributeValue(PIRATEBOX_NAMESPACE, "setting");
isNumeric = attrs.getAttributeValue(ANDROID_NAMESPACE, "numeric") != null ? true : false;
try {
numericDivider = Long.valueOf(attrs.getAttributeValue(PIRATEBOX_NAMESPACE, "numericDivider"));
}
catch(Exception e) {
numericDivider = null;
}
}
}