package co.smartreceipts.android.settings.widget; import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; import java.text.DecimalFormat; import co.smartreceipts.android.R; import wb.android.preferences.FloatSummaryEditTextPreference; public class MinimumPriceEditTextPreference extends FloatSummaryEditTextPreference { private static final float INCLUDE_ALL = -Float.MAX_VALUE; private static final float EPISILON = 0.1f; public MinimumPriceEditTextPreference(Context context) { super(context); } public MinimumPriceEditTextPreference(Context context, AttributeSet attrs) { super(context, attrs); } public MinimumPriceEditTextPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public String getText() { String text = super.getText(); try { float value = Float.parseFloat(text); if (Math.abs(value - INCLUDE_ALL) < EPISILON) { // We're including all return ""; } else { return text; } } catch (NumberFormatException e) { return text; } } @Override public CharSequence getSummary() { if (TextUtils.isEmpty(getText()) || getText().equals(String.valueOf(INCLUDE_ALL))) { return getContext().getString(R.string.pref_receipt_minimum_receipts_price_summary_all); } else { try { float minPrice = Float.parseFloat(getText()); DecimalFormat decimalFormat = new DecimalFormat(); decimalFormat.setMaximumFractionDigits(2); decimalFormat.setMinimumFractionDigits(2); decimalFormat.setGroupingUsed(false); return getContext().getString(R.string.pref_receipt_minimum_receipts_price_summary_partial, decimalFormat.format(minPrice)); } catch (NumberFormatException e) { persistFloat(INCLUDE_ALL); return getContext().getString(R.string.pref_receipt_minimum_receipts_price_summary_all); } } } @Override protected boolean persistString(String value) { if (TextUtils.isEmpty(value)) { return persistFloat(INCLUDE_ALL); // Don't persist zero here (we'll recurse and always end at zero) } else { try { return persistFloat(Float.valueOf(value)); } catch (NumberFormatException e) { return false; } } } }