package io.homeassistant.android.view.viewholders; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import java.util.List; import io.homeassistant.android.HassActivity; import io.homeassistant.android.R; import io.homeassistant.android.api.Attribute; import io.homeassistant.android.api.requests.SelectRequest; public class InputSelectViewHolder extends TextViewHolder implements AdapterView.OnItemSelectedListener { private final Spinner inputSpinner; private int lastSelected; public InputSelectViewHolder(View itemView) { super(itemView); inputSpinner = (Spinner) itemView.findViewById(R.id.input_spinner); } @Override protected void updateViews() { super.updateViews(); inputSpinner.setOnItemSelectedListener(null); List<String> options = entity.attributes.getList(Attribute.OPTIONS, String.class); if (options != null) { ArrayAdapter adapter = new ArrayAdapter<>(inputSpinner.getContext(), android.support.design.R.layout.support_simple_spinner_dropdown_item, options.toArray()); inputSpinner.setAdapter(adapter); inputSpinner.setSelection(lastSelected = options.indexOf(entity.state)); inputSpinner.setOnItemSelectedListener(this); } else { inputSpinner.setVisibility(View.GONE); } } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (position == lastSelected) { return; } HassActivity activity = (HassActivity) inputSpinner.getContext(); activity.send(new SelectRequest(entity, (String) parent.getAdapter().getItem(position)), (success, result) -> { if (success) { lastSelected = inputSpinner.getSelectedItemPosition(); } else { inputSpinner.setSelection(lastSelected, true); } }); } @Override public void onNothingSelected(AdapterView<?> parent) { // Never called } }