package cgeo.geocaching.filter; import cgeo.geocaching.enumerations.CacheSize; 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 SizeFilter extends AbstractFilter { private final CacheSize cacheSize; public static final Creator<SizeFilter> CREATOR = new Parcelable.Creator<SizeFilter>() { @Override public SizeFilter createFromParcel(final Parcel in) { return new SizeFilter(in); } @Override public SizeFilter[] newArray(final int size) { return new SizeFilter[size]; } }; SizeFilter(@NonNull final CacheSize cacheSize) { super(cacheSize.id); this.cacheSize = cacheSize; } protected SizeFilter(final Parcel in) { super(in); cacheSize = CacheSize.values()[in.readInt()]; } @Override public boolean accepts(@NonNull final Geocache cache) { return cacheSize == cache.getSize(); } @Override @NonNull public String getName() { return cacheSize.getL10n(); } public static class Factory implements IFilterFactory { @Override @NonNull public List<IFilter> getFilters() { final CacheSize[] cacheSizes = CacheSize.values(); final List<IFilter> filters = new LinkedList<>(); for (final CacheSize cacheSize : cacheSizes) { if (cacheSize != CacheSize.UNKNOWN) { filters.add(new SizeFilter(cacheSize)); } } return filters; } } @Override public void writeToParcel(final Parcel dest, final int flags) { super.writeToParcel(dest, flags); dest.writeInt(cacheSize.ordinal()); } }