package com.boardgamegeek.sorter; import android.content.Context; import android.database.Cursor; import android.support.annotation.NonNull; import android.support.annotation.StringRes; import android.util.SparseArray; import com.boardgamegeek.R; import com.boardgamegeek.provider.BggContract.Games; public class RankSorter extends CollectionSorter { @NonNull private final String defaultHeaderText; @NonNull private final String defaultText; private static final SparseArray<String> RANKS = buildRanks(); public RankSorter(@NonNull Context context) { super(context); defaultHeaderText = context.getResources().getString(R.string.unranked); defaultText = context.getResources().getString(R.string.text_not_available); } @StringRes @Override protected int getDescriptionId() { return R.string.collection_sort_rank; } @StringRes @Override public int getTypeResource() { return R.string.collection_sort_type_rank; } @Override protected String getSortColumn() { return Games.GAME_RANK; } @Override public String getHeaderText(@NonNull Cursor cursor) { int rank = getInt(cursor, Games.GAME_RANK, Integer.MAX_VALUE); for (int i = 0; i < RANKS.size(); i++) { int key = RANKS.keyAt(i); if (rank <= key) { return RANKS.get(key); } } return defaultHeaderText; } @NonNull @Override public String getDisplayInfo(@NonNull Cursor cursor) { int rank = getInt(cursor, Games.GAME_RANK, Integer.MAX_VALUE); if (rank == Integer.MAX_VALUE) { return defaultText; } return String.valueOf(rank); } @NonNull private static SparseArray<String> buildRanks() { SparseArray<String> ranks = new SparseArray<>(); ranks.put(100, "1 - 100"); ranks.put(250, "101 - 250"); ranks.put(500, "251 - 500"); ranks.put(1000, "501 - 1000"); ranks.put(2500, "1001 - 2500"); ranks.put(5000, "2501 - 5000"); ranks.put(10000, "5001 - 10000"); ranks.put(Integer.MAX_VALUE, "10001+"); return ranks; } }