aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/filter/PopularityFilter.java
blob: eabc5334ef0b34e5ac6ba0e305bcbbbd1ca97708 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package cgeo.geocaching.filter;

import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;

import org.eclipse.jdt.annotation.NonNull;

import java.util.ArrayList;
import java.util.List;

class PopularityFilter extends AbstractFilter {
    private final int minFavorites;
    private final int maxFavorites;

    public PopularityFilter(@NonNull final String name, final int minFavorites, final int maxFavorites) {
        super(name);
        this.minFavorites = minFavorites;
        this.maxFavorites = maxFavorites;
    }

    @Override
    public boolean accepts(@NonNull final Geocache cache) {
        return (cache.getFavoritePoints() > minFavorites) && (cache.getFavoritePoints() <= maxFavorites);
    }

    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 int maxRange = Integer.MAX_VALUE;
                final String range = "> " + minRange;
                final String name = CgeoApplication.getInstance().getResources().getQuantityString(R.plurals.favorite_points, minRange, range);
                filters.add(new PopularityFilter(name, minRange, maxRange));
            }
            return filters;
        }

    }
}