package org.wikipedia.settings;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
import android.text.TextUtils;
import android.util.AttributeSet;
import org.wikipedia.R;
public class LongPreference extends EditTextAutoSummarizePreference {
private static final int[] DEFAULT_STYLEABLE = R.styleable.LongPreference;
private static final int DEFAULT_STYLE = R.style.LongPreference;
private static final int DEFAULT_RADIX = 10;
private static final String DEFAULT_SUMMARY_FORMAT = "%d";
private int radix = DEFAULT_RADIX;
private String summaryFormat = DEFAULT_SUMMARY_FORMAT;
public LongPreference(Context context) {
this(context, null);
}
public LongPreference(Context context, AttributeSet attrs) {
this(context, attrs, DEFAULT_STYLE_ATTR);
}
public LongPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs, defStyleAttr, DEFAULT_STYLE);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public LongPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(attrs, defStyleAttr, defStyleRes);
}
public int getRadix() {
return radix;
}
public void setRadix(int radix) {
this.radix = radix;
updateAutoSummary();
}
public String getSummaryFormat() {
return summaryFormat;
}
public void setSummaryFormat(String format) {
summaryFormat = format;
updateAutoSummary();
}
@Override
protected String getPersistedString(String defaultRadixValue) {
return longToSummary(getPersistedLong(radixStringToLong(defaultRadixValue)));
}
@Override
protected boolean persistString(String radixValue) {
boolean persistent = persistRadixString(radixValue);
updateAutoSummary(radixValue);
return persistent;
}
@Override
protected void updateAutoSummary(String radixValue) {
super.updateAutoSummary(sanitizeRadixString(radixValue));
}
protected boolean persistRadixString(String radixValue) {
return persistLong(radixStringToLong(radixValue));
}
protected String sanitizeRadixString(String radixValue) {
return longToSummary(radixStringToLong(radixValue));
}
protected long radixStringToLong(String radixValue) {
return TextUtils.isEmpty(radixValue) ? 0 : Long.valueOf(radixValue, getRadix());
}
protected String longToSummary(long value) {
return String.format(getSummaryFormat(), value);
}
private void setAttributes(AttributeSet attrs, int defStyleAttr, int defStyleRes) {
TypedArray array = getContext().obtainStyledAttributes(attrs, DEFAULT_STYLEABLE,
defStyleAttr, defStyleRes);
radix = array.getInteger(R.styleable.LongPreference_radix, DEFAULT_RADIX);
summaryFormat = defaultIfEmpty(array.getString(R.styleable.LongPreference_summaryFormat),
DEFAULT_SUMMARY_FORMAT);
array.recycle();
}
private void init(AttributeSet attrs, int defStyleAttr, int defStyleRes) {
setAttributes(attrs, defStyleAttr, defStyleRes);
}
private <T extends CharSequence> T defaultIfEmpty(T value, T defaultValue) {
return TextUtils.isEmpty(value) ? defaultValue : value;
}
}