package cgeo.geocaching.filter; import cgeo.geocaching.CgeoApplication; import cgeo.geocaching.R; import cgeo.geocaching.models.Geocache; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; import java.util.ArrayList; import java.util.List; class PopularityFilter extends AbstractFilter { private final int minFavorites; public static final Creator<PopularityFilter> CREATOR = new Parcelable.Creator<PopularityFilter>() { @Override public PopularityFilter createFromParcel(final Parcel in) { return new PopularityFilter(in); } @Override public PopularityFilter[] newArray(final int size) { return new PopularityFilter[size]; } }; PopularityFilter(@NonNull final String name, final int minFavorites) { super(name); this.minFavorites = minFavorites; } protected PopularityFilter(final Parcel in) { super(in); minFavorites = in.readInt(); } @Override public boolean accepts(@NonNull final Geocache cache) { return cache.getFavoritePoints() > minFavorites; } public static class Factory implements IFilterFactory { private static final int[] FAVORITES = { 10, 20, 50, 100, 200, 500 }; @Override @NonNull public List<IFilter> getFilters() { final List<IFilter> filters = new ArrayList<>(FAVORITES.length); for (final int minRange : FAVORITES) { final String range = "> " + minRange; final String name = CgeoApplication.getInstance().getResources().getQuantityString(R.plurals.favorite_points, minRange, range); filters.add(new PopularityFilter(name, minRange)); } return filters; } } @Override public void writeToParcel(final Parcel dest, final int flags) { super.writeToParcel(dest, flags); dest.writeInt(minFavorites); } }