package org.azavea.otm.ui; import java.util.LinkedHashMap; import java.util.List; import org.azavea.otm.App; import org.azavea.otm.R; import org.azavea.otm.FilterManager; import org.azavea.otm.adapters.SpeciesAdapter; import org.azavea.otm.data.Species; import org.azavea.otm.fields.Field; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class SpeciesListDisplay extends FilterableListDisplay<Species> { @Override protected int getFilterHintTextId() { return R.string.filter_species_hint; } @Override protected String getIntentDataKey() { return Field.TREE_SPECIES; } @Override public void onCreate(Bundle data) { super.onCreate(data); FilterManager search = App.getFilterManager(); if (search.getSpecies().size() > 0) { renderSpeciesList(); } else { search.loadSpeciesList(msg -> { if (msg.getData().getBoolean("success")) { renderSpeciesList(); } else { Toast.makeText(App.getAppInstance(), "Could not get species list", Toast.LENGTH_SHORT).show(); } return true; }); } } private void renderSpeciesList() { LinkedHashMap<Integer, Species> list = App.getFilterManager().getSpecies(); Species[] species = list.values().toArray(new Species[list.size()]); // Sectionize by first letter of common name LinkedHashMap<CharSequence, List<Species>> speciesSections = groupListByKeyFirstLetter(species, Species::getCommonName); // Bind the custom adapter to the view SpeciesAdapter adapter = new SpeciesAdapter(this, speciesSections); Log.d(App.LOG_TAG, list.size() + " species loaded"); renderList(adapter); } }