package treehou.se.habit.ui.widgets.factories; import android.view.View; import android.widget.Button; import android.widget.TextView; import se.treehou.ng.ohcommunicator.connector.models.OHLinkedPage; 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 SetpointWidgetFactory implements IWidgetFactory { @Override public WidgetFactory.IWidgetHolder build(final WidgetFactory widgetFactory, OHLinkedPage page, final OHWidget widget, final OHWidget parent) { return new SetpointWidgetHolder(widget, parent, widgetFactory); } public static class SetpointWidgetHolder implements WidgetFactory.IWidgetHolder { private View itemView; private Button btnIncrease; private Button btnDecrease; private TextView lblValue; private BaseWidgetFactory.BaseWidgetHolder baseHolder; private WidgetFactory factory; public SetpointWidgetHolder(OHWidget widget, OHWidget parent, WidgetFactory factory) { this.factory = factory; itemView = factory.getInflater().inflate(R.layout.item_widget_setpoint, null); btnDecrease = (Button) itemView.findViewById(R.id.btn_down); btnIncrease = (Button) itemView.findViewById(R.id.btn_up); lblValue = (TextView) itemView.findViewById(R.id.lbl_widget_point); baseHolder = new BaseWidgetFactory.BaseWidgetHolder.Builder(factory) .setWidget(widget) .setFlat(true) .setParent(parent) .build(); baseHolder.getSubView().addView(itemView); update(widget); } @Override public View getView() { return baseHolder.getView(); } @Override public void update(final OHWidget widget) { if (widget == null) { return; } if(widget.getItem() != null) { lblValue.setText(widget.getItem().getFormatedValue()); } btnIncrease.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setValueRelative(widget, widget.getStep()); } }); btnDecrease.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setValueRelative(widget, -widget.getStep()); } }); baseHolder.update(widget); } private void setValueRelative(OHWidget widget, float value) { if(widget.getItem() == null) { return; } lblValue.setText("" + value); float setpointValue = widget.getMinValue(); try { if(widget.getItem() != null) { setpointValue = Float.valueOf(widget.getItem().getState())+value; } }catch (NumberFormatException e){ return; } setpointValue = Math.min(Math.max(setpointValue, widget.getMinValue()), widget.getMaxValue()); setValue(widget, setpointValue); } private void setValue(OHWidget widget, float value) { String state = String.valueOf(value); if(widget.getItem() != null) { try { widget.getItem().setState(state); if(widget.getItem() != null) { lblValue.setText(widget.getItem().getFormatedValue()); } IServerHandler serverHandler = new Connector.ServerHandler(factory.getServer(), factory.getContext()); serverHandler.sendCommand(widget.getItem().getName(), String.valueOf(value)); } catch (Exception e) {} } } } }