package cgeo.geocaching.filter; import cgeo.geocaching.enumerations.CacheAttribute; import cgeo.geocaching.models.Geocache; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; import java.util.LinkedList; import java.util.List; class AttributeFilter extends AbstractFilter { private final String attribute; public static final Creator<AttributeFilter> CREATOR = new Parcelable.Creator<AttributeFilter>() { @Override public AttributeFilter createFromParcel(final Parcel in) { return new AttributeFilter(in); } @Override public AttributeFilter[] newArray(final int size) { return new AttributeFilter[size]; } }; AttributeFilter(@NonNull final String name, final String attribute) { super(name); this.attribute = attribute; } protected AttributeFilter(final Parcel in) { super(in); attribute = in.readString(); } @Override public boolean accepts(@NonNull final Geocache cache) { return cache.getAttributes().contains(attribute); } public static class Factory implements IFilterFactory { @Override @NonNull public List<IFilter> getFilters() { final List<IFilter> filters = new LinkedList<>(); for (final CacheAttribute cacheAttribute : CacheAttribute.values()) { filters.add(new AttributeFilter(cacheAttribute.getL10n(true), cacheAttribute.getValue(true))); filters.add(new AttributeFilter(cacheAttribute.getL10n(false), cacheAttribute.getValue(false))); } return filters; } } @Override public void writeToParcel(final Parcel dest, final int flags) { super.writeToParcel(dest, flags); dest.writeString(attribute); } }