package cgeo.geocaching.filter;
import cgeo.geocaching.R;
import cgeo.geocaching.models.Geocache;
import android.support.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.StringRes;
import java.util.ArrayList;
import java.util.List;
class TerrainFilter extends AbstractRangeFilter {
private TerrainFilter(@StringRes final int name, final int terrain) {
// do not inline the name constant. Android Lint has a bug which would lead to using the super super constructors
// @StringRes annotation for the non-annotated terrain parameter of this constructor.
super(name, terrain, Factory.TERRAIN_MAX);
}
protected TerrainFilter(final Parcel in) {
super(in);
}
@Override
public boolean accepts(@NonNull final Geocache cache) {
final float terrain = cache.getTerrain();
return rangeMin <= terrain && terrain < rangeMax;
}
public static class Factory implements IFilterFactory {
private static final int TERRAIN_MIN = 1;
private static final int TERRAIN_MAX = 7;
@Override
@NonNull
public List<IFilter> getFilters() {
final List<IFilter> filters = new ArrayList<>(TERRAIN_MAX);
for (int terrain = TERRAIN_MIN; terrain <= TERRAIN_MAX; terrain++) {
filters.add(new TerrainFilter(R.string.cache_terrain, terrain));
}
return filters;
}
}
public static final Creator<TerrainFilter> CREATOR
= new Parcelable.Creator<TerrainFilter>() {
@Override
public TerrainFilter createFromParcel(final Parcel in) {
return new TerrainFilter(in);
}
@Override
public TerrainFilter[] newArray(final int size) {
return new TerrainFilter[size];
}
};
}