package gueei.binding.markupDemoICS.converters; import gueei.binding.Converter; import gueei.binding.IObservable; /** * Enforce range of input, should be used in EditText as it will set the value back * args[0] String (coz we need to allow empt string) * args[1] Min Value (int) * args[2] Max Value (int) * @author andy * */ public class InputRange extends Converter<CharSequence> { public InputRange(IObservable<?>[] dependents) { super(CharSequence.class, dependents); } @Override public boolean ConvertBack(Object value, Object[] outResult) { boolean needChange = false; Integer min = Integer.parseInt(this.mDependents[1].get().toString()); Integer max = Integer.parseInt(this.mDependents[2].get().toString()); outResult[1] = min; outResult[2] = max; // Allow zero-length string if (value!=null && value.toString().length() == 0){ outResult[0] = ""; return true; } Integer val = 0; try{ val = Integer.parseInt(value.toString()); }catch(Exception e){ val = 0; } if (val>max){ val = max; needChange = true; } else if (val<min){ val = min; needChange = true; } outResult[0] = val.toString(); if (needChange){ this.set(val.toString()); } return true; } @Override public CharSequence calculateValue(Object... args) throws Exception { if (args.length<1) return "3 arguments are required"; return args[0].toString(); } }