package im.actor.runtime.mvvm;
public class FilteredValue<T, S> extends Value<S> {
private Value<T> baseValue;
private S value;
private ValueConverter<T, S> converter;
private ValueChangedListener<T> changedListener = new ValueChangedListener<T>() {
@Override
public void onChanged(T val, Value<T> valueModel) {
FilteredValue.this.value = converter.convert(val);
notifyInMainThread(FilteredValue.this.value);
}
};
public FilteredValue(String name, Value<T> valueModel, ValueConverter<T, S> converter) {
super(name);
this.converter = converter;
this.baseValue = valueModel;
this.value = converter.convert(valueModel.get());
baseValue.subscribe(changedListener, false);
}
@Override
public S get() {
return value;
}
public void destroy() {
baseValue.unsubscribe(changedListener);
}
}