package org.azavea.otm.ui; import android.app.ProgressDialog; import android.os.Bundle; import android.widget.Toast; import org.azavea.helpers.Logger; import org.azavea.otm.App; import org.azavea.otm.R; import org.azavea.otm.adapters.LinkedHashMapAdapter; import org.azavea.otm.data.InstanceInfo; import org.azavea.otm.rest.RequestGenerator; import org.azavea.otm.rest.handlers.LoggingJsonHttpResponseHandler; import org.json.JSONArray; import java.util.LinkedHashMap; import java.util.List; import cz.msebera.android.httpclient.Header; public class PublicInstanceListDisplay extends FilterableListDisplay<InstanceInfo> { public static final String MODEL_DATA = "instance"; @Override protected int getFilterHintTextId() { return R.string.filter_instances_hint; } @Override protected String getIntentDataKey() { return MODEL_DATA; } @Override public void onCreate(Bundle data) { super.onCreate(data); final RequestGenerator rg = new RequestGenerator(); final ProgressDialog loadingInstances = ProgressDialog.show(this, getString(R.string.instance_switcher_dialog_heading), getString(R.string.instance_switcher_loading_instances)); rg.getPublicInstances(new LoggingJsonHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, JSONArray response) { loadingInstances.dismiss(); List<InstanceInfo> list = InstanceInfo.getInstanceInfosFromJSON(response); InstanceInfo[] instances = list.toArray(new InstanceInfo[list.size()]); LinkedHashMap<CharSequence, List<InstanceInfo>> sectionedInstances = groupListByKeyFirstLetter(instances, InstanceInfo::getName); LinkedHashMapAdapter<InstanceInfo> adapter = new LinkedHashMapAdapter<>( PublicInstanceListDisplay.this, sectionedInstances, R.layout.list_separator_row, R.id.separator, R.layout.public_instance_element_row, R.id.text); adapter.setFilterType(LinkedHashMapAdapter.FilterType.ANYWHERE); renderList(adapter); } @Override public void failure(Throwable e, String responseBody) { loadingInstances.dismiss(); Logger.error("Error retrieving public instances", e); Toast.makeText(App.getAppInstance(), R.string.instances_failed, Toast.LENGTH_SHORT).show(); } }); } }