package treehou.se.habit.ui.widgets.factories;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import java.util.List;
import se.treehou.ng.ohcommunicator.connector.models.OHLinkedPage;
import se.treehou.ng.ohcommunicator.connector.models.OHMapping;
import se.treehou.ng.ohcommunicator.connector.models.OHWidget;
import se.treehou.ng.ohcommunicator.services.Connector;
import se.treehou.ng.ohcommunicator.services.IServerHandler;
import treehou.se.habit.R;
import treehou.se.habit.ui.widgets.WidgetFactory;
public class SelectionWidgetFactory implements IWidgetFactory {
@Override
public WidgetFactory.IWidgetHolder build(final WidgetFactory widgetFactory, OHLinkedPage page, final OHWidget widget, final OHWidget parent) {
return new SelectWidgetHolder(widget, parent, widgetFactory);
}
public static class SelectWidgetHolder implements WidgetFactory.IWidgetHolder {
private static final String TAG = "SelectWidgetHolder";
private View itemView;
private Spinner sprSelect;
private WidgetFactory factory;
private int lastPosition = -1;
private BaseWidgetFactory.BaseWidgetHolder baseHolder;
public SelectWidgetHolder(OHWidget widget, OHWidget parent, WidgetFactory factory) {
this.factory = factory;
baseHolder = new BaseWidgetFactory.BaseWidgetHolder.Builder(factory)
.setWidget(widget)
.setParent(parent)
.build();
itemView = factory.getInflater().inflate(R.layout.item_widget_selection, null);
sprSelect = (Spinner) itemView.findViewById(R.id.spr_selector);
baseHolder.getSubView().addView(itemView);
update(widget);
}
@Override
public View getView() {
return baseHolder.getView();
}
@Override
public void update(final OHWidget widget) {
Log.d(TAG, "update " + widget);
if (widget == null) {
return;
}
sprSelect.setOnItemSelectedListener(null);
final List<OHMapping> mappings = widget.getMapping();
final ArrayAdapter<OHMapping> mappingAdapter = new ArrayAdapter<>(factory.getContext(), R.layout.item_text, mappings);
sprSelect.setAdapter(mappingAdapter);
for(int i=0; i<mappings.size(); i++){
if (mappings.get(i).getCommand().equals(widget.getItem().getState())){
sprSelect.setSelection(i);
lastPosition = i;
break;
}
}
//TODO request value
// Prevents rouge initial fire
sprSelect.post(new Runnable() {
@Override
public void run() {
sprSelect.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(position != lastPosition) {
OHMapping mapping = mappings.get(position);
final IServerHandler serverHandler = new Connector.ServerHandler(factory.getServer(), factory.getContext());
serverHandler.sendCommand(widget.getItem().getName(), mapping.getCommand());
lastPosition = position;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
mappingAdapter.notifyDataSetChanged();
}
});
baseHolder.update(widget);
}
}
}